<?php
/*
 * 跳转到URL
 * @param string $info 显示信息
 * @param string $url 跳转到的地址。当$url为-1时，为返回上一页。为空时，为返回主页
 * @return void
*/
function redirect ($info,$url='') {
	if (empty($url)) $url='index.php';
	if ($url=='-1') {
		$url='javascript:history.back();';
		$js='history.back();';
	} else {
		$js='window.location.href="'.$url.'";';
	}
	include(TPL.'redirect.html');
	exit;
}
/*
 * 写入文件，限本地
 * @param string $file 文件名
 * @param string $content 文件内容
 * @return mixed
*/
function writeFile ($file,$content='') {
	$file=ROOT.trim($file,'/');
	return file_put_contents($file,$content);
}
/*
 * 读取文件，限本地
 * @param string $file 文件名
 * @return mixed
*/
function getFile ($file) {
	if (strpos($file,ROOT)===FALSE) $file=ROOT.trim($file,'/');
	return (is_file($file)?file_get_contents($file):NULL);
}
/*
 * 获取当前完整URL，包括参数
 * @return string
*/
function nowurl () {
	static $nowurl='';
	if (!empty($nowurl)) return $nowurl;
	if (!empty($_SERVER['REQUEST_URI'])) {
		$scriptName=$_SERVER['REQUEST_URI'];
		$nowurl=$scriptName;
	} else {
		$scriptName=$_SERVER['PHP_SELF'];
		if (empty($_SERVER['QUERY_STRING'])) {
			$nowurl=$scriptName;
		} else {
			$nowurl=$scriptName.'?'.$_SERVER['QUERY_STRING'];
		}
	}
	return $nowurl;
}
/*
 * 使用curl抓取远程内容
 * @param string $url 地址
 * @param array $data 附加属性
 * @param array $data[header] 发送的HTTP头信息
 * @param array $data[cookie] 发送的Cookie
 * @param array $data[post] POST方式提交的数据
 * @return string
*/
function curl_get ($url,$data=array()) {
	$ch=curl_init();
	curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
	curl_setopt($ch,CURLOPT_URL,$url);
	curl_setopt($ch,CURLOPT_HEADER,0);
	curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
	curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);
	curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0);
	if (isset($data['header'])) curl_setopt($ch,CURLOPT_HTTPHEADER,$data['header']);
	if (isset($data['cookie'])) curl_setopt($ch,CURLOPT_COOKIE,$data['cookie']);
	if (isset($data['post'])) {
		curl_setopt($ch,CURLOPT_POST,1);
		curl_setopt($ch,CURLOPT_POSTFIELDS,$data['post']);
	}
	$result=curl_exec($ch);
	@curl_close($ch);
	return $result;
}
/*
 * 随机字符串生成
 * @param int $num 长度
 * @param boolean $rmyc 是否移除易混淆字符，默认为FALSE（不移除）
 * @return string
*/
function randstr ($num,$rmyc=FALSE) {
	if ($rmyc) $str='abdefhjkmnpqrstuvwxyz23456789ABDEFHJKLMNPQRSTUVWXYZ';
	else $str='abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ';
	$fullstr='';
	do {
		$fullstr.=$str;
	} while (strlen($fullstr)<$num);
	return substr(str_shuffle($fullstr),0,$num);
}
/*
 * 获取参数，提取自UCenter
 * @param string $k 名称
 * @param string $t 类型，可选：G,P,C,R
 * @return mixed
*/
function getgpc ($k,$t='R') {
	switch ($t) {
		case 'P':
			$var=$_POST;
			break;
		case 'G':
			$var=$_GET;
			break;
		case 'C':
			$var=$_COOKIE;
			break;
		case 'R':
			$var=$_REQUEST;
			break;
	}
	return isset($var[$k])?(is_array($var[$k])?$var[$k]:trim($var[$k])):NULL;
}
/*
 * 是否为POST请求
 * @return boolean
*/
function ispost () {
	if (count($_POST)>0) return TRUE;
	else return FALSE;
}
/*
 * 加密、解密字符串（可逆）提取自UCenter
 * @param string $string 需要加密/解密的字符串
 * @param string $operation 类型，加密为ENCODE，解密为DECODE
 * @param string $key 加密/解密Key。默认为ENKEY
 * @param int $expiry 过期时间，单位：秒。0为不过期
 * @return string
*/
function authcode ($string, $operation = 'ENCODE', $key = '', $expiry = 0) {
	$ckey_length = 4;
	$key = md5($key ? $key : ENKEY);
	$keya = md5(substr($key, 0, 16));
	$keyb = md5(substr($key, 16, 16));
	$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';
	$cryptkey = $keya.md5($keya.$keyc);
	$key_length = strlen($cryptkey);
	$string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;
	$string_length = strlen($string);
	$result = '';
	$box = range(0, 255);
	$rndkey = array();
	for($i = 0; $i <= 255; $i++) {
		$rndkey[$i] = ord($cryptkey[$i % $key_length]);
	}
	for($j = $i = 0; $i < 256; $i++) {
		$j = ($j + $box[$i] + $rndkey[$i]) % 256;
		$tmp = $box[$i];
		$box[$i] = $box[$j];
		$box[$j] = $tmp;
	}

	for($a = $j = $i = 0; $i < $string_length; $i++) {
		$a = ($a + 1) % 256;
		$j = ($j + $box[$a]) % 256;
		$tmp = $box[$a];
		$box[$a] = $box[$j];
		$box[$j] = $tmp;
		$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
	}
	if($operation == 'DECODE') {
		if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {
			return substr($result, 26);
		} else {
			return '';
		}
	} else {
		return $keyc.str_replace('=', '', base64_encode($result));
	}
}
/*
 * 针对密码进行加密（不可逆）
 * @param string $str 需要加密的字符串
 * @return string
*/
function pwdcode ($str) {
	$str=md5($str);
	$str=sha1('SmartHome'.$str);
	$str=md5($str.'MSH');
	$str=md5('SY'.$str.'lIngD');
	return $str;
}
/*
 * 获取操作类
 * @param string $name 名称
 * @return Object
*/
function getClass ($name) {
	if (!class_exists($name,FLASE)) require(INC.$name.'.class.php');
	$classname=$name.'_class';
	return $classname::getInstance();
}
?>